﻿using System.Diagnostics;
using System.Net.NetworkInformation;

namespace TroubleshootingofBeanBagAssistant
{
	/// <summary>
	/// 网络检测
	/// </summary>
	public class NetworkDetectionHelper
	{
		#region 网络检测

		private const int INTERNET_CONNECTION_MODEM = 1;
		private const int INTERNET_CONNECTION_LAN = 2;

		[System.Runtime.InteropServices.DllImport("winInet.dll")]
		private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);
		/// <summary>
		/// 判断本地的连接状态
		/// </summary>
		/// <returns></returns>
		public static bool LocalConnectionStatus()
		{
			System.Int32 dwFlag = new();
			if (!InternetGetConnectedState(ref dwFlag, 0))
			{
				//Debug.WriteLine("LocalConnectionStatus--未连网!");
				return false;
			}
			else
			{
				if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0)
				{
					//Debug.WriteLine("LocalConnectionStatus--采用调制解调器上网。");
					return true;
				}
				else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0)
				{
					// Debug.WriteLine("LocalConnectionStatus--采用网卡上网。");
					return true;
				}
			}
			return false;
		}


		/// <summary>
		/// Ping命令检测网络是否畅通
		/// </summary>
		/// <param name="urls">URL数据</param>
		/// <param name="errorCount">ping时连接失败个数</param>
		/// <returns></returns>
		public static bool MyPing(string[] urls, out int errorCount)
		{
			bool isconn = true;
			Ping ping = new();
			errorCount = 0;
			try
			{
				PingReply pr;
				for (int i = 0; i < urls.Length; i++)
				{
					pr = ping.Send(urls[i]);
					if (pr.Status != IPStatus.Success)
					{
						isconn = false;
						errorCount++;
					}
					Debug.WriteLine("Ping " + urls[i] + "    " + pr.Status.ToString());
				}

			}
			catch
			{
				isconn = false;
				errorCount = urls.Length;
			}
			//if (errorCount > 0 && errorCount < 3)
			//  isconn = true;
			return isconn;
		}


		#endregion
	}
}
